#define _GNU_SOURCE
#include "daemon_runner.h"
#include "daemon_sub_process.h"
#include "unistd.h"
#include <fcntl.h>
#include <signal.h>

#define sub_process_count 2
static  int is_running = 1;
static  SubProcess *sub_process[2];
static  void term_func(int sig)
{
     is_running=0;
     
}
/**
 * @brief 守护进程运行
 */
int daemon_runner_run()
{
    // 1 设置   信号 
    daemon(0, 1);//必须引用_GNU_SOURCE
    //  关于日志 标准输出 标准错误 指向文件 
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    open(LOG_FILE, O_CREAT|O_RDWR, 0666);
    open(LOG_FILE, O_CREAT|O_RDWR, 0666);
    // 信号 
    signal(SIGTERM, term_func);

    // 2 初始化子进程
     sub_process[0]=  sub_process_init("app");
     sub_process[1]=  sub_process_init("ota");
   
    // 3  循环 逐个检查并运行
    
    while(is_running)
    { 
         for (size_t i = 0; i < sub_process_count; i++)
         {
             sub_process_check_and_start(sub_process[i]);
         }
         sleep(1);
    }

    // 4  收尾 逐个kill 退出
    for (size_t i = 0; i < sub_process_count; i++)
    {
        sub_process_stop(sub_process[i]);
    }
    return 0;
}
